package OODay03_Day09;
//晚串讲
public class Day09N {
    /*第一个知识点 类
    * 什么是类
    * Java语言最基本的单位就是类 相当于类型
    * 类是一系列事物抽取的共同属性(特征)与功能(方法)而形成的
    * 例如 动物 人 花 草 植物等都属于类*/

    /*什么是对象
    * 特点 1特征或属性 2功能 3对象标识
    * 对象的属性 用来描述对象的基本特征
    * 对象的功能 用来描述对象的能够完成的操作
    * 对象标识 是指每个对象在内存中都有一个唯一的地址 用来区别与其他对象的,类似我们的身份证*/

    /*一个Java文件里 只能有一个public修饰符修饰的类 且public修饰的类需要与文件名同名*/

    //Phone p1 =new Phone("XXX");在内存中会发生什么
    //1 在栈内存中开辟一快空间 存放引用类型的变量p1
    //2 在堆内存中开辟一块空间 存放Phone类型对象
    //3 给这个对象进行初始化 也可以单独初始化 String atr = "abc";
    //4 当对象准备好之后 会在堆中生成一个唯一的地址值 之后将此地址的值交给引用类型的变量p1
    //5 如果以后要操作Phone的资源 可以通过p1变量保存的地址 找到该对象 或者调用该对象内的方法与属性

    //第二个知识点 this
    //代表<本类>对象的引用对象
    //当成员变量与局部变量重名时 可以使用this关键字来指定本类的成员变量 如果不使用这个关键字 输出的是局部变量(就近原则)

    //构造方法
    //特殊的方法 与类同名 且没有返回值类型的方法
    //作用 完成对象创建或者初始化功能

    //语法:
    // 修饰符 方法名(参数列表){
    // 方法体
    // }

    //构造方法要注意的事项
    //1 每次new(实例化)对象时 都会触发对应类的构造方法
    //2 每一个类都会默认存在一个没有参数的构造(无参构造) 如果你提供了有参构造 那么默认的无参构造就将被覆盖
    // 所以我如果手动提供了一个有参构造 还想用无参 则需要手动提供无参构造 这样才能不传实例化对象
    //3 每次实例化对象 都会执行构造
    //4 构造方法没有返回值类型 且与类同名

    //继承 super 方法重写override
    //什么是继承 继承是面向对象的最显著的一个特征
    //继承是从已有的类中派生出新的类 新类能吸收已有类的属性和行为 并扩展新的能力
    //Java继承是在已存在的类的基础之上建立新类的技术
    //新类可以增加新的数据或新的功能 也可以使用父类的功能
    //继承的特性
    //1 使用extends关键字来表示来表示继承关系
    //2 相当于子类把父类的功能复制了一份(扩展)
    //3 Java只支持单继承
    //4 继承可以传递
    //5 父类的私有成员或方法 由于访问限制 所以子类不能访问父类的私有资源
    //6 继承多用于功能的修改 子类可以在拥有父类功能的同时 进行功能扩展

    //super关键字
    //可以把super看作父类的对象
    //当父类对象的成员变量与子类对象的成员变量重名时 使用super来指定父类对象的成员变量

    //方法重写override
    //继承之后子类就拥有了父类的某些功能
    //在子类中 可以添加子类特有的功能 也可以修改父类原有功能
    //子类中方法的签名与父类要完全一致 会发生覆盖(复写)

    //重写要求 两同两小一大
    //子类方法名和参数类型一定要相同 参数列表顺序可以不一致
    //子类的返回值类型,异常 必须小于父类的返回值类型
    //子类的类修饰词必须大于父类(public最大)
}
